package org.bt.common.validator;

import org.bt.common.validator.aspect.Min;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.math.BigDecimal;

/**
 * Check that the character sequence (e.g. string) being validated represents a number, and has a value
 * more than or equal to the minimum value specified.
 *
 * @author tongw
 */
public class MinValidatorForCharSequence implements ConstraintValidator<Min, CharSequence> {

    private BigDecimal minValue;

    @Override
    public void initialize(Min minValue) {
        this.minValue = BigDecimal.valueOf(minValue.value());
    }

    @Override
    public boolean isValid(CharSequence value, ConstraintValidatorContext constraintValidatorContext) {
        //null values are valid
        if (value == null) {
            return true;
        }
        try {
            return new BigDecimal(value.toString()).compareTo(minValue) != -1;
        } catch (NumberFormatException nfe) {
            return false;
        }
    }
}
